"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/2/24 8:42
@Description : 学生信息管理系统

功能：
   1. 查询学生列表
   2. 增加学生信息
   3. 删除学生信息
   4. 修改学生信息
   5. 查询学生信息     根据学号查询单个学生信息
   6. 退出系统
分析 ：   使用文件实现数据的持久化操作
"""
import json
from prettytable import PrettyTable
#  使用列表存储学生信息  每个学生信息使用字典存储
while True:

    print('*' * 10, '欢迎使用学生信息管理系统', '*' * 10)
    print('1. 查询学生列表')
    print('2. 增加学生信息')
    print('3. 删除学生信息')
    print('4. 修改学生信息')
    print('5. 查询学生信息')
    print('6. 退出系统')
    print('*' * 42)

    # 提示用户选择功能
    user_choice = input('请选择功能序号:')
    #  判定用户选择  进入不同的分支
    match user_choice:
        case '1':
            print('*' * 10, '查询学生列表', '*' * 10)
            with open('file/students.json','rt',encoding='utf8') as f:
                students = json.load(f)
            table = PrettyTable()
            table.field_names = ['ID','StudentName','Age','Sex','Class']
            for student in students:
                table.add_row([student['student_id'],student['student_name'],student['age'],student['sex'],student['class']])
            print(table)
        case '2':
            print('*' * 10, '增加学生信息', '*' * 10)
            '''
                1. 接收用户输入学生信息
                2. 将数据保存在字典中
                3. 将字典追加到列表中
            '''
            with open('file/students.json','r',encoding='utf8') as f:
                student_list = json.load(f)
            while True:
                student_id = input('请输入学号:')
                # 遍历学生信息列表
                for student in student_list:
                    # student  字典  'student_id'  in  student      202502001    in   student
                    if student_id == student['student_id']:
                        print('您输入的学号已存在,请重新输入')
                        break
                else:
                    break
            student_name = input('请输入姓名:')
            age = int(input('请输入年龄:'))
            sex = input('请输入性别:')
            clazz = input('请输入班级:')
            # 保存学生信息到字典
            student_dict = {
                'student_id': student_id,
                'student_name': student_name,
                'age': age,
                'sex': sex,
                'class': clazz
            }
            # 将学生信息字典追加到student_list
            student_list.append(student_dict)
            with open('file/students.json', 'w', encoding='utf8') as f:
                json.dump(student_list,f,ensure_ascii=False,indent=4)
            print(f'学生信息添加成功,学号:{student_id},姓名:{student_name},年龄:{age},性别:{sex},班级:{clazz}')
        case '3':
            print('*' * 10, '删除学生信息', '*' * 10)
            student_id = input('请输入删除学生的学号:')
            # 从student_list中删除  指定学号的字典
            with open('file/students.json', 'r', encoding='utf8') as f:
                student_list = json.load(f)
            for student in student_list:
                if student_id == student['student_id']:
                    student_list.remove(student)
                    with open('file/students.json', 'w', encoding='utf8') as f:
                        json.dump(student_list,f,ensure_ascii=False,indent=4)
                    print(
                        f'学生信息删除成功,删除的学生：学号:{student['student_id']},姓名:{student['student_name']},年龄:{student['age']},性别:{student['sex']},班级:{student['class']}')
                    break
            else:
                print('删除失败,您输入的学号不存在!')
        case '4':
            print('*' * 10, '修改学生信息', '*' * 10)
            student_id = input('请输入学生的学号:')
            with open('file/students.json', 'r', encoding='utf8') as f:
                student_list = json.load(f)
            # 遍历修改的学生是否存在
            for student in student_list:
                if student_id == student['student_id']:
                    # 修改的学生存在  提示用户输入需要修改的属性  key    name
                    student_attr = input('请输入您需要修改的属性:')
                    if student_attr in student:
                        #  提示用户输入属性值
                        student_attr_new_value = input('请输入您需要修改的属性值:')
                        student[student_attr] = student_attr_new_value
                        with open('file/students.json', 'w', encoding='utf8') as f:
                            json.dump(student_list, f,ensure_ascii=False,indent=4)
                        print(
                            f'学生信息修改成功,学号:{student['student_id']},姓名:{student['student_name']},年龄:{student['age']},性别:{student['sex']},班级:{student['class']}')
                        break
                    else:
                        print('您修改的属性不存在')
                        break
            else:
                print('修改失败,您输入的学号不存在!')

        case '5':
            print('*' * 10, '查询学生信息', '*' * 10)
            student_id = input('请输入需要查询的学生学号:')
            with open('file/students.json', 'r', encoding='utf8') as f:
                student_list = json.load(f)
            for student in student_list:
                if student_id == student['student_id']:
                    print(
                        f'学生信息查询成功,学号:{student['student_id']},姓名:{student['student_name']},年龄:{student['age']},性别:{student['sex']},班级:{student['class']}')
                    break
            else:
                print('查询失败,您输入的学号不存在!')
        case '6':
            print('*' * 10, '退出系统', '*' * 10)
            break
        case _:
            print('对不起,您选择的功能不存在')

    #  询问用户是否继续  输入0 继续
    is_back = int(input('请输入0返回:'))
    if is_back == 0:
        continue  # 继续下次循环
    else:
        break  # 结束循环
print('程序安全退出,欢迎下次使用!')
